# 内置函数：在python环境安装好后，自带的函数。
#########################数学运算########################################
# abs:求取数字的绝对值
print(abs(-80))
# round:求取近似值；默认情况下，当第二个参数不具体指定时，返回整数;第二个参数可以指定保留的位数
print(round(3.62666,2))
# pow求取某个数字的指数运算
# pow有三个参数，前两个参数表示求第一个参数的多少次（第二个参数）的幂
# 如果指定第三个参数，则表示两个参数的指数运算与第三个参数的求余操作
print(pow(2,3))  #表示的是2的3次方
print(pow(2,3,3))   #表示的是2的3次方  % 3
# divmod ：一个包含商和余数的元组(a // b, a % b)
print(divmod(8,3))
# max 求最大值
print(max(1,8,9,3,4,6))
# min 求最小值
print(min(1,8,9,3,4,6))
# sum 求和运算;第二个参数可选，若不填写，默认为0；若填写，则表示前面参数的相加结果与第二个参数相加
print(sum([2,3,4,9],100))
# eval() 函数用来执行一个字符串表达式，并返回表达式的值
def func1():
    print("aaaaa")
    pass
print(eval("func1()"))
# a=9
# b=11
# print(eval("a+b"))
print(eval('a+b+c',{'c':3,'a':1,'b':3}))

#######################类型转换#######################################
# int() ：可以将字符串或者数字转换成整型
print(int("3"))
print(type(int("3")))
print(int(3.6))
# float() 函数用于将整数和字符串转换成浮点数
print(float("6"))
print(float(5))
# str() 函数将对象转化为适于人阅读的形式
print(str(6))
print(type(str(6)))
#  ord() 函数是 chr() 函数（对于8位的ASCII字符串）或 unichr() 函数（对于Unicode对象）的配对函数，
#  它以一个字符（长度为1的字符串）作为参数，
#  返回对应的 ASCII 数值，或者 Unicode 数值，
#  如果所给的 Unicode 字符超出了你的 Python 定义范围，则会引发一个 TypeError 的异常
print(ord('a'))
# chr() 用一个范围在 range（256）内的（就是0～255）整数作参数，返回一个对应的字符
print(chr(97))
#  bool() 函数用于将给定参数转换为布尔类型，如果没有参数，返回 False
# 下列对象都相当于False：[],(),{},0, None, 0.0, ''
print(bool("python"))
# bin() 返回一个整数 int 或者长整数 long int 的二进制表示
print(bin(8))   #0000 1000
# hex() 函数用于将10进制整数转换成16进制，以字符串形式表示
print(hex(15))  #0 1 2 3 4 5 6 7 8 9 a b c d e f
# oct() 函数将一个整数转换成8进制字符串
print(oct(8))
# list() 方法用于将元组转换为列表
tuple1=(1,3.14,"python")
list1=list(tuple1)
print(list1)
list1.append("2022-3-22")
print(list1)
# tuple()函数将列表转换为元组
tuple2=tuple(list1)
print(tuple2)
# dict() 函数用于创建一个字典
print(dict(name="tom",age=18,hobby="唱歌"))
# bytes()方法返回一个新字节数组，这个数组里的元素是可变的，并且每个元素的值范围: 0 <= x < 256
print(bytes("中",encoding="utf-8"))

###############################序列操作##########################################
# all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE，
# 如果是返回 True，否则返回 False元素除了是 0、空、FALSE 外都算 TRUE
# 相当于逻辑运算中的and
# 空元祖，空列表返回值为True
list1=[9,3.14,"python",""]
print(all(list1))
print(all(()))

# any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False，则返回 False，
# 如果有一个为 True，则返回 True；元素除了是 0、空、FALSE 外都算 TRUE
# 相当于逻辑运算中的or
print(any(list1))

# sorted() 函数对所有可迭代的对象进行排序操作
# sort与sorted 区别：
# sort是应用在 list 上的方法，sorted 可以对所有可迭代的对象进行排序操作,
# list 的 sort 方法返回的是对已经存在的列表进行操作，而内建函数 sorted 方法返回的是一个新的 list，
# 而不是在原来的基础上进行的操作
list2=[1,8,5,6,3]
# list2.sort()   #sort方法对列表进行排序
print(list2)
list3=sorted(list2,reverse=True)  #sort方法是对原列表进行排序操作，而sorted方法，返回一个排序后的新列表
print(list3)

# reverse() 函数用于反向列表中元素
list3.reverse()
print(list3)

# range() 函数可创建一个整数列表，一般用在 for 循环中
# range(start,end,[step])   指定从几开始生成，到多少结束，不包括end的值，第一个参数可以省略，默认从0开始
for item in range(0,19,2):
    print(item)
    pass

# zip() 函数用于将可迭代的对象作为参数，将对象中对应的元素打包成一个个元组，然后返回由这些元组组成的列表
# 如果各个迭代器的元素个数不一致，则返回列表长度与最短的对象相同，利用 * 号操作符，可以将元组解压为列表
# 如果可迭代对象的元素个数不一样，那么按照最少的那个迭代压缩最少元素进行可迭代对象结束后退出
# list4=["name","age","hobby","weight"]
# list5=["tom",26,"唱歌"]
# print(list(zip(list4,list5)))

# enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列，
# 同时列出数据和数据下标，一般用在 for 循环当中
# for item in enumerate(list4,3):
#     # print(index)
#     print(item)
#     pass
# 参数为字典元素时，以键值进行打包处理
dict1={"name":"tom","age":26}
for item in enumerate(dict1):
    print(item)
    pass
# 模拟图书馆图书信息录入
# 要求：批量输入序号，书名，位置，使用临时数据库（可以用列表）进行存储数据
# 输入完毕后，打印图书信息：序号，书名，位置
def printBookInfo():
    books=[]   #定义一个列表，进行数据信息的存储
    bookIndex=input("请输入图书编号，以空格分隔")
    bookName=input("请输入图书名字，以空格分隔")
    bookAddress=input("请输入图书地址，以空格分隔")
    indexList=bookIndex.split(" ")  #将用户输入的图书编号用split方法进行分隔，将分隔的结果放在列表中保存
    nameList=bookName.split(" ")   #将用户输入的图书名字用split方法进行分隔，将分隔的结果放在列表中保存
    addressList = bookAddress.split(" ")  # 将用户输入的图书名字用split方法进行分隔，将分隔的结果放在列表中保存
    bookinfoes= zip(indexList,nameList,addressList)   #将图书信息进行打包
    for item in bookinfoes:
        bookinfo={"书籍编号":item[0],"书籍名字":item[1],"书籍地址":item[2]}
        books.append(bookinfo)
    pass
    for i in books:
        print(i)
printBookInfo()



